/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufpr.tads.Rent.controller;

import br.ufpr.tads.Rent.controller.EnumClass.*;
import br.ufpr.tads.Rent.model.ClienteDTO;
import br.ufpr.tads.Rent.model.LocacaoDAO;
import br.ufpr.tads.Rent.model.LocacaoDTO;
import br.ufpr.tads.Rent.model.VeiculoDAO;
import br.ufpr.tads.Rent.model.VeiculoDTO;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author G0006185
 */
public abstract class Veiculo  implements VeiculoI  {

    public marca marca;
    public estado estado;
    private categoria categoria;
    private String placa;
    private int ano;
    private double vCompra;
  
    @Override
    public  abstract double getValorDiariaLocacao(int cat);
    final VeiculoDAO veiculo;
    public Veiculo() throws IOException, FileNotFoundException, ClassNotFoundException, SQLException{
        veiculo = new VeiculoDAO();
    }
    public void addVeiculo(VeiculoDTO veiculodto) throws SQLException{
       veiculo.addVeiculo(veiculodto);
    }
     @Override
    public void locar(int dias, Calendar data, ClienteDTO cliente){
        try {
            veiculo.venderVeiculo(cliente.getVeiculoi().getId());
            LocacaoDAO locacao = new LocacaoDAO();
            LocacaoDTO loc = new LocacaoDTO();
            loc.setCliente(cliente.getIdCliente());
            loc.setData(data);
            loc.setVeiculo(cliente.getVeiculoi().getId());
            locacao.Locar(loc);
        } catch (SQLException | ClassNotFoundException | IOException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    @Override
    public void vender(int id) {
        try {
            veiculo.venderVeiculo(id);
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    @Override
    public void devolver(int id) {
        try {
            veiculo.devolveVeiculo(id);
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public estado getEstado(int id) {
        try {
            estado =  estado.values()[veiculo.findVeiculoid(id).getModelo()];
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
            return estado;

    }
    @Override
    public marca getMarca(int id) {
        try {       
            marca =  marca.values()[veiculo.findVeiculoid(id).getModelo()];
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
            return marca;
     
    }
    @Override
    public categoria getCategoria(int id){
        try {  
            categoria = categoria.values()[veiculo.findVeiculoid(id).getModelo()];
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
            return categoria;
    }
    @Override
    public Locacao getLocacao() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    @Override
    public String getPlaca(int id){
        try {
            placa = veiculo.findVeiculoid(id).getPlaca();
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
          return placa;
    }
    @Override
    public int getAno(int id) {     
        try {
            ano = veiculo.findVeiculoid(id).getAno();
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ano; 
    }
    @Override
    public double getValorParaVenda(int id) {

        try {
            vCompra = veiculo.findVeiculoid(id).getValorCompra();
        } catch (SQLException ex) {
            Logger.getLogger(Automovel.class.getName()).log(Level.SEVERE, null, ex);
        }
        Calendar cal = Calendar.getInstance();            
        return vCompra -(cal.get(Calendar.YEAR)-this.getAno(id))*0.15*vCompra;       
    }
   
}
